//引入express
const express = require('express');
//引入连接池模块
const pool = require('../pool.js');
//console.log(pool);
//创建路由器对象
const r = express.Router();
//1.用户注册(post /)
//http://127.0.0.1:8080/v1/users
r.post('/',(req,res,next)=>{
  //1.1获取post请求的数据
  let obj = req.body;
  console.log(obj);
  //1.2验证各项数据是否为空
  if(!obj.uname){
    res.send({code: 401,msg: 'uname不能为空'});
	//跳出函数
	return;
  }
  if(!obj.upwd){
    res.send({code: 402,msg: 'upwd不能为空'});
	return;
  }
  if(!obj.email){
    res.send({code: 403,msg: 'email不能为空'});
	return;
  }
  if(!obj.phone){
    res.send({code: 404,msg: 'phone不能为空'});
	return;
  }
  //验证手机号码格式
  //如果不是
  if( !(/^1[3-9]\d{9}$/.test(obj.phone)) ){
    res.send({code: 301,msg: '手机号码格式错误'});
	return;
  }
  //1.3执行SQL命令
  pool.query('insert into xz_user set ?',[obj],(err,result)=>{
    if(err) {
	  //如果出现错误交给下一个中间件
	  next(err);
	  //不能往后继续执行
	  return;
	}
    console.log(result);
	res.send({code:200, msg:'注册成功'});
  });  
});
//2.用户登录(post /login)
//http://127.0.0.1:8080/v1/users/login
r.post('/login',(req,res,next)=>{
  //2.1获取post传递的数据
  let obj = req.body;
  console.log(obj);
  //2.2验证各项数据是否为空
  if(!obj.uname){
    res.send({code: 401, msg: 'uname不能为空'});
	return;
  }
  if(!obj.upwd){
    res.send({code: 402, msg: 'upwd不能为空'});
	return;
  }
  //2.3执行SQL命令
  pool.query('select * from xz_user where uname=? and upwd=?',[obj.uname,obj.upwd],(err,result)=>{
    if(err){
	  next(err);
	  return;
	}
	console.log(result);
	//结果是数组，如果数组长度为0说明登录失败，否则登录成功
	if(result.length === 0){
	  res.send({code: 201, msg: '登录失败'});
	}else{
	  res.send({code: 200, msg: '登录成功'});
	}
  });
});
//3.修改用户(put /)
//http://127.0.0.1:8080/v1/users
r.put('/',(req,res,next)=>{
  //3.1获取传递的数据
  let obj = req.body;
  console.log(obj);
  //3.2循环验证
  let i = 400;
  for(let k in obj){
	i++;
    //console.log(k, obj[k]);
	//如果属性值obj[k]为空，则提示k这项不能为空
	if(!obj[k]){
	  res.send({code: i, msg: k+'不能为空'});
	  return;
	}
  }
  //3.3执行SQL命令
  pool.query('update xz_user set ? where uid=?',[obj,obj.uid],(err,result)=>{
    if(err){
	  next(err);
	  return;
	}
	console.log(result);
	//结果是对象，如果对象下的属性affectedRows为0说明修改失败，否则修改成功
	if(result.affectedRows === 0){
	  res.send({code: 201, msg: '修改失败'});
	}else{
	  res.send({code: 200, msg: '修改成功'});
	}
  });
});
//4.检测用户名是否可用(get /用户名)
//http://127.0.0.1:8080/v1/users/checkuname/tao
r.get('/checkuname/:uname',(req,res,next)=>{
  //4.1获取路由传参的数据
  let obj = req.params;
  console.log(obj);
  //4.2执行SQL命令
  pool.query('select * from xz_user where uname=?',[obj.uname],(err,result)=>{
    if(err){
	  next(err);
	  return;
	}
	console.log(result);
	//结果是数组，如果数组长度为0说明该用户可以，未被注册，否则该用户已被注册
	if(result.length === 0){
	  res.send({code: 200, msg: '该用户名可以使用'});
	}else{
	  res.send({code: 201, msg: '该用户名已被注册'});
	}
  });  
});
//5.删除用户(delete /编号)
r.delete('/:uid',(req,res,next)=>{
  //5.1获取路由传参的数据
  let obj = req.params;
  console.log(obj);
  //5.2执行SQL命令
  pool.query('delete from xz_user where uid=?',[obj.uid],(err,result)=>{
    if(err){
	  next(err);
	  return;
	}
	console.log(result);
	//结果是对象，如果对象下affectedRows为0说明删除失败，否则删除成功
	if(result.affectedRows === 0){
	  res.send({code: 201, msg: '删除失败'});
	}else{
	  res.send({code: 200, msg: '删除成功'});
	}
  });
});
//6.用户列表(get /)
r.get('/',(req,res,next)=>{
  //6.1获取查询字符串传递的数据
  let obj = req.query;
  console.log(obj);
  //6.2判断是否为空，如果为空设置默认值
  if(!obj.pno) obj.pno = 1;//默认第1页
  if(!obj.count) obj.count = 2; //默认显示2条数据
  console.log(obj);
  //计算开始的值
  let start = (obj.pno - 1) * obj.count;
  //将每页数据量转为整型
  let size = parseInt( obj.count );
  //执行SQL命令
  pool.query('select uid,uname,email,phone from xz_user limit ?,?',[start,size],(err,result)=>{
    if(err){
	  next(err);
	  return;
	}
	res.send({
	  code: 200,
	  msg: '查询成功',
	  data: result   //把查询的数据响应
	});
  });
});


//导出路由器对象
module.exports = r;